<?php
namespace App\Http\Controllers\Admin;

use App\Models\Menu;
use App\Models\Role;
use Illuminate\Http\Request;

/**
 * 角色权限管理
 *
 * @author Miluo Huang
 */
class RoleController extends Controller
{

	/**
	 * 角色列表
	 */
	public function roleList()
	{
		$data = Role::all();
		return view('admin.role.list')->withData($data);
	}

	/**
	 * 编辑角色
	 */
	public function roleShowEdit(Request $request)
	{
		// 取得要编辑的对象。
		$data = Role::find($request->input('id'));

		return view('admin.role.edit')
				->withData($data)
				->withMenu($this->getMenuLists());
	}

	/**
	 * 菜单列表
	 */
	protected function getMenuLists($pid = 0, &$lists = array(), $deep = 0)
	{
		$data = Menu::where('pid', $pid)->orderBy('sort', 'desc')->get()->toArray();
		foreach ($data as $item) {
			$item['option'] = str_repeat('&nbsp;&nbsp;&nbsp;', $deep) . '|-' . $item['name'];
			$item['level'] = $deep;
			$lists[] = $item;
			$this->getMenuLists($item['id'], $lists, $deep + 1); //进入子类之前深度+1         --$deep; //从子类退出之后深度-1     }
		}
		return $lists;
	}

	/**
	 * 保存编辑
	 */
	public function saveEdit(Request $request)
	{
		// 验证输入。
		$this->validate($request, [
			'id' => [
				'exists:roles,id'
			],
			'name' => [
				'required',
				'max:60'
			],
			'remark' => [
				'max:140'
			],
			'menu' => [
				'required',
				'array'
			]
		]);

		// 取得要编辑的对象。
		$data = $request->has('id') ? Role::find($request->input('id')) : new Role();

		$actions =  (array) $request->input('menu', '');
		$menus = [];
		foreach($actions as $key =>$val){
			$menus[$key]=$key;
		}
		// 保存编辑。
		$data->name = $request->input('name');
		$data->remark = $request->input('remark', '');
		$data->actions = $actions;
		$data->menus = $menus;
		$data->save();
		// 返回成功信息。
		return redirect()->route('AdminRoleList')->withMessageSuccess('保存成功。');
	}

	/**
	 * 删除角色
	 */
	public function actionDelete()
	{
		// 验证输入。
		$this->validate($this->request, [
				'id' => [
						'required',
						'exists:roles,id'
				]
		]);

		// 取得要删除的对象。
		$data = Role::find($this->request->input('id'));

		// 删除对象。
		$data->delete();

		// 返回成功信息。
		return redirect()->back()->withMessageSuccess('成功删除 <strong>' . $data->name . '</strong> 角色。');
	}
}
